import 'package:flutter/material.dart';

/// 对输入的文件/文件夹名称进行清理和校验。
///
/// 规则：
/// - 去掉首尾空格；
/// - 名称不能为空；
/// - 不能为 `.` 或 `..`；
/// - 不能包含 `/` 或 `\`。
///
/// 返回：
/// - 合法名称字符串；
/// - 若非法则返回 `null`。
String? sanitizeName(String raw) {
  final name = raw.trim();
  if (name.isEmpty) return null;
  if (name == '.' || name == '..') return null;
  if (name.contains('/') || name.contains('\\')) return null;
  return name;
}

/// 弹出「新建文件/文件夹」输入对话框。
///
/// - [isFolder] 是否为文件夹（若为文件夹，默认值为 `"New Folder"`）；
/// - [context] 构建上下文；
///
/// 返回：
/// - 用户输入的合法名称（通过 [sanitizeName] 校验）；
/// - 若取消或输入不合法则返回 `null`。
///
/// 使用示例：
/// ```dart
/// final name = await promptNewName(context, isFolder: true);
/// if (name != null) {
///   // 执行创建逻辑
/// }
/// ```
Future<String?> promptNewName(BuildContext context, {required bool isFolder}) {
  final controller = TextEditingController(
    text: isFolder ? 'New Folder' : '',
  );

  return showDialog<String>(
    context: context,
    builder: (context) => AlertDialog(
      title: Text(isFolder ? 'New Folder' : 'New File'),
      content: TextField(
        controller: controller,
        autofocus: true,
        decoration: const InputDecoration(hintText: 'Enter name'),
        onSubmitted: (_) {
          final name = sanitizeName(controller.text);
          if (name != null) Navigator.of(context).pop(name);
        },
      ),
      actions: [
        TextButton(
          onPressed: () => Navigator.of(context).pop(null),
          child: const Text('Cancel'),
        ),
        ElevatedButton(
          onPressed: () {
            final name = sanitizeName(controller.text);
            if (name != null) Navigator.of(context).pop(name);
          },
          child: const Text('Determine'),
        ),
      ],
    ),
  );
}

/// 弹出「重命名」输入对话框。
///
/// - [oldName] 当前的旧名称；
/// - [context] 构建上下文；
///
/// 返回：
/// - 用户输入的新名称（通过与 [sanitizeName] 相同的规则校验）；
/// - 若取消或输入不合法则返回 `null`。
///
/// 使用示例：
/// ```dart
/// final newName = await promptRenameName(context, 'old.dart');
/// if (newName != null) {
///   // 执行重命名逻辑
/// }
/// ```
Future<String?> promptRenameName(BuildContext context, String oldName) {
  final controller = TextEditingController(text: oldName);

  String? sanitize(String raw) {
    final name = raw.trim();
    if (name.isEmpty) return null;
    if (name == '.' || name == '..') return null;
    if (name.contains('/') || name.contains('\\')) return null;
    return name;
  }

  return showDialog<String>(
    context: context,
    builder: (context) => AlertDialog(
      title: const Text('Rename'),
      content: TextField(
        controller: controller,
        autofocus: true,
        decoration: const InputDecoration(hintText: 'Enter new name'),
        onSubmitted: (_) {
          final name = sanitize(controller.text);
          if (name != null) Navigator.of(context).pop(name);
        },
      ),
      actions: [
        TextButton(
          onPressed: () => Navigator.of(context).pop(null),
          child: const Text('Cancel'),
        ),
        ElevatedButton(
          onPressed: () {
            final name = sanitize(controller.text);
            if (name != null) Navigator.of(context).pop(name);
          },
          child: const Text('Determine'),
        ),
      ],
    ),
  );
}

/// 显示一个简单的 Toast（使用 [SnackBar] 实现）。
///
/// - [context] 构建上下文；
/// - [msg] 要显示的消息；
///
/// 注意：若 [context] 已经卸载，则不会显示。
///
/// 使用示例：
/// ```dart
/// toast(context, '文件已保存');
/// ```
void toast(BuildContext context, String msg) {
  if (!context.mounted) return;
  ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(msg)));
}
